// Header Protection
#ifndef _GLEXT_H_
#define _GLEXT_H_

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <gl\GL.h>

// Initialization
extern bool GLExtInit();



//glActiveShaderProgram
//glActiveTexture
//----------glAttachShader
//----------glBeginConditionalRender
//glBeginQuery
//glBeginQueryIndexed
//----------glBeginTransformFeedback
//----------glBindAttribLocation
//----------glBindBuffer
//----------glBindBufferBase
//----------glBindBufferRange
//----------glBindFragDataLocation
//glBindFragDataLocationIndexed
//glBindFramebuffer
//glBindProgramPipeline
//glBindRenderbuffer
//glBindSampler
//glBindTexture
//glBindTransformFeedback
//----------glBindVertexArray
//glBlendColor
//glBlendEquation
//glBlendEquationSeparate
//glBlendFunc
//glBlendFuncSeparate
//glBlitFramebuffer
//----------glBufferData
//----------glBufferSubData
//glCheckFramebufferStatus
//----------glClampColor
//glClear
//glClearBuffer                                                   <--- more than one?
//glClearColor
//glClearDepth
//glClearStencil
//glClientWaitSync
//glColorMask
//----------glColorMaski
//----------glCompileShader
//glCompressedTexImage1D
//glCompressedTexImage2D
//glCompressedTexImage3D
//glCompressedTexSubImage1D
//glCompressedTexSubImage2D
//glCompressedTexSubImage3D
//glCopyBufferSubData
//glCopyTexImage1D
//glCopyTexImage2D
//glCopyTexSubImage1D
//glCopyTexSubImage2D
//----------glCopyTexSubImage3D
//----------glCreateProgram
//----------glCreateShader
//glCreateShaderProgram
//glCullFace
//----------glDeleteBuffers
//glDeleteFramebuffers
//----------glDeleteProgram
//glDeleteProgramPipelines
//glDeleteQueries
//glDeleteRenderbuffers
//glDeleteSamplers
//----------glDeleteShader
//glDeleteSync
//glDeleteTextures
//glDeleteTransformFeedbacks
//----------glDeleteVertexArrays
//glDepthFunc
//glDepthMask
//glDepthRange
//glDepthRangeArray
//glDepthRangeIndexed
//----------glDetachShader
//glDisable                                                       <--- more than one?
//glDisableVertexAttribArray
//glDrawArrays
//glDrawArraysIndirect
//glDrawArraysInstanced
//glDrawBuffer
//----------glDrawBuffers
//glDrawElements
//glDrawElementsBaseVertex
//glDrawElementsIndirect
//glDrawElementsInstanced
//glDrawElementsInstancedBaseVertex
//----------glDrawRangeElements
//glDrawRangeElementsBaseVertex
//glDrawTransformFeedback
//glDrawTransformFeedbackStream
//glEnable                                                        <--- more than one?
//----------glEnableVertexAttribArray
//----------glEndConditionalRender
//glEndQuery
//glEndQueryIndexed
//----------glEndTransformFeedback
//glFenceSync
//glFinish
//glFlush
//glFlushMappedBufferRange
//glFramebufferRenderbuffer
//glFramebufferTexture
//glFramebufferTextureLayer
//glFrontFace
//----------glGenBuffers
//glGenFramebuffers
//glGenProgramPipelines
//glGenQueries
//glGenRenderbuffers
//glGenSamplers
//glGenTextures
//glGenTransformFeedbacks
//----------glGenVertexArrays
//glGenerateMipmap
//glGet                                                           <--- more than one?
//----------glGetActiveAttrib
//glGetActiveSubroutineName
//glGetActiveSubroutineUniform
//glGetActiveSubroutineUniformName
//----------glGetActiveUniform
//glGetActiveUniformBlock
//glGetActiveUniformBlockName
//glGetActiveUniformName
//glGetActiveUniformsiv
//----------glGetAttachedShaders
//----------glGetAttribLocation
//glGetBufferParameter                                            <--- more than one?
//----------glGetBufferPointerv
//----------glGetBufferSubData
//glGetCompressedTexImage
//glGetError
//glGetFragDataIndex
//----------glGetFragDataLocation
//glGetFramebufferAttachmentParameter
//glGetMultisample
//glGetProgram                                                    <--- more than one?
//glGetProgramBinary
//----------glGetProgramInfoLog
//glGetProgramPipeline
//glGetProgramPipelineInfoLog
//glGetProgramStage
//glGetQueryIndexed
//glGetQueryObject
//glGetQueryiv
//glGetRenderbufferParameter
//glGetSamplerParameter
//glGetShader                                                     <--- more than one?
//----------glGetShaderInfoLog
//glGetShaderPrecisionFormat
//----------glGetShaderSource
//glGetString                                                     <--- more than one?
//glGetSubroutineIndex
//glGetSubroutineUniformLocation
//glGetSync
//glGetTexImage
//glGetTexLevelParameter
//glGetTexParameter                                               <--- more than one?
//----------glGetTransformFeedbackVarying
//glGetUniform                                                    <--- more than one?
//glGetUniformBlockIndex
//glGetUniformIndices
//----------glGetUniformLocation
//glGetUniformSubroutine
//glGetVertexAttrib                                               <--- more than one?
//glGetVertexAttribPointerv
//glHint
//----------glIsBuffer
//glIsEnabled                                                     <--- more than one?
//glIsFramebuffer
//----------glIsProgram
//glIsProgramPipeline
//glIsQuery
//glIsRenderbuffer
//glIsSampler
//----------glIsShader
//glIsSync
//glIsTexture
//glIsTransformFeedback
//----------glIsVertexArray
//glLineWidth
//----------glLinkProgram
//glLogicOp
//----------glMapBuffer
//glMapBufferRange
//glMinSampleShading
//glMultiDrawArrays
//glMultiDrawElements
//glMultiDrawElementsBaseVertex
//glPatchParameter
//glPauseTransformFeedback
//glPixelStore
//glPointParameter
//glPointSize
//glPolygonMode
//glPolygonOffset
//glPrimitiveRestartIndex
//glProgramBinary
//glProgramParameter
//glProgramUniform
//glProvokingVertex
//glQueryCounter
//glReadBuffer
//glReadPixels
//glReleaseShaderCompiler
//glRenderbufferStorage
//glRenderbufferStorageMultisample
//glResumeTransformFeedback
//glSampleCoverage
//glSampleMaski
//glSamplerParameter
//glScissor
//glScissorArray
//glScissorIndexed
//glShaderBinary
//----------glShaderSource
//glStencilFunc
//----------glStencilFuncSeparate
//glStencilMask
//glStencilMaskSeparate
//glStencilOp
//----------glStencilOpSeparate
//glTexBuffer
//glTexImage1D
//glTexImage2D
//glTexImage2DMultisample
//----------glTexImage3D
//glTexImage3DMultisample
//glTexParameter                                                  <--- more than one?
//glTexSubImage1D
//glTexSubImage2D
//----------glTexSubImage3D
//----------glTransformFeedbackVaryings
//glUniform                                                       <--- more than one?
//glUniformBlockBinding
//glUniformSubroutines
//----------glUnmapBuffer
//----------glUseProgram
//glUseProgramStages
//----------glValidateProgram
//glValidateProgramPipeline
//glVertexAttrib                                                  <--- more than one?
//glVertexAttribDivisor
//----------glVertexAttribPointer
//glViewport
//glViewportArray
//glViewportIndexed
//glWaitSync



/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 1.1

// GL_blend_logic_op
// GL_copy_texture
// GL_polygon_offset
// GL_subtexture
// GL_texture
// GL_texture_object
// GL_vertex_array

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 1.2

// GL_bgra
// GL_draw_range_elements
// GL_packed_pixels
// GL_rescale_normal
// GL_separate_specular_color
// GL_texture3D
// GL_texture_edge_clamp
// GL_texture_lod

// glDrawRangeElements
// glTexImage3D
// glTexSubImage3D
// glCopyTexSubImage3D

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 1.3

// TODO

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 1.4

// TODO

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 1.5

// GL_occlusion_query
// TODO

// GL_vertex_buffer_object

typedef void (__stdcall *PFN_glBindBuffer)( GLenum _eTarget, uint_t _uBuffer );
extern PFN_glBindBuffer glBindBuffer;

typedef void (__stdcall *PFN_glDeleteBuffers)( 
	uint_t _uCount, uint_t const *_puBuffers 
	);
extern PFN_glDeleteBuffers glDeleteBuffers;

typedef void (__stdcall *PFN_glGenBuffers)( 
	uint_t _uCount, uint_t *_puBuffers 
	);
extern PFN_glGenBuffers glGenBuffers;

typedef bool_t (__stdcall *PFN_glIsBuffer)( uint_t _uBuffer );
extern PFN_glIsBuffer glIsBuffer;

typedef void (__stdcall *PFN_glBufferData)( 
	GLenum _eTarget, uint_t _uSize, void const *_pData, GLenum _eUsage 
	);
extern PFN_glBufferData glBufferData;

typedef void (__stdcall *PFN_glBufferSubData)( 
	GLenum _eTarget, int_t _iOffset, uint_t _uSize, void const *_pData 
	);
extern PFN_glBufferSubData glBufferSubData;

typedef void (__stdcall *PFN_glGetBufferSubData)( 
	GLenum _eTarget, int_t _iOffset, uint_t _uSize, void *_pData 
	);
extern PFN_glGetBufferSubData glGetBufferSubData;

typedef void *(__stdcall *PFN_glMapBuffer)( GLenum _eTarget, GLenum _eAccess );
extern PFN_glMapBuffer glMapBuffer;

typedef bool_t (__stdcall *PFN_glUnmapBuffer)( GLenum _eTarget );
extern PFN_glUnmapBuffer glUnmapBuffer;

typedef void (__stdcall *PFN_glGetBufferParameteriv)(     // <--- more than one type?
													 GLenum _eTarget, GLenum _eParamName, int_t *_piParams 
													 );
extern PFN_glGetBufferParameteriv glGetBufferParameteriv;

typedef void (__stdcall *PFN_glGetBufferPointerv)(
	GLenum _eTarget, GLenum _eParamName, void **_ppParams 
	);
extern PFN_glGetBufferPointerv glGetBufferPointerv;

#define GL_ARRAY_BUFFER                                    0x8892
#define GL_ELEMENT_ARRAY_BUFFER                            0x8893

#define GL_ARRAY_BUFFER_BINDING                            0x8894
#define GL_ELEMENT_ARRAY_BUFFER_BINDING                    0x8895
#define GL_VERTEX_ARRAY_BUFFER_BINDING                     0x8896
#define GL_NORMAL_ARRAY_BUFFER_BINDING                     0x8897
#define GL_COLOR_ARRAY_BUFFER_BINDING                      0x8898
#define GL_INDEX_ARRAY_BUFFER_BINDING                      0x8899
#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING              0x889A
#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING                  0x889B
#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING            0x889C
#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING             0x889D
#define GL_WEIGHT_ARRAY_BUFFER_BINDING                     0x889E

#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING              0x889F

#define GL_STREAM_DRAW                                     0x88E0
#define GL_STREAM_READ                                     0x88E1
#define GL_STREAM_COPY                                     0x88E2
#define GL_STATIC_DRAW                                     0x88E4
#define GL_STATIC_READ                                     0x88E5
#define GL_STATIC_COPY                                     0x88E6
#define GL_DYNAMIC_DRAW                                    0x88E8
#define GL_DYNAMIC_READ                                    0x88E9
#define GL_DYNAMIC_COPY                                    0x88EA

#define GL_READ_ONLY                                       0x88B8
#define GL_WRITE_ONLY                                      0x88B9
#define GL_READ_WRITE                                      0x88BA

#define GL_BUFFER_SIZE                                     0x8764
#define GL_BUFFER_USAGE                                    0x8765
#define GL_BUFFER_ACCESS                                   0x88BB
#define GL_BUFFER_MAPPED                                   0x88BC

#define GL_BUFFER_MAP_POINTER                              0x88BD

// GL_shadow_funcs
// TODO

//glGenQueries
//glDeleteQueries
//glISQuery
//glBeginQuery
//glEndQuery
//glGetQueryiv
//glGetQueryObjectiv
//glGetQueryObjectuiv

//#define GL_QUERY_COUNTER_BITS                              0x8864
//#define GL_CURRENT_QUERY                                   0x8865
//#define GL_QUERY_RESULT                                    0x8866
//#define GL_QUERY_RESULT_AVAILABLE                          0x8867
//#define GL_SAMPLES_PASSED                                  0x8914

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 2.0

// GL_draw_buffers
// GL_fragment_shader
// GL_point_sprite
// GL_shader_objects
// GL_shading_language_100
// GL_texture_non_power_of_two
// GL_vertex_shader
// GL_blend_equation_seperate
// GL_stencil_two_side

// glAttachShader
// glBindAttribLocation
// glCompileShader
// glCreateProgram
// glCreateShader
// glDeleteProgram
// glDeleteShader
// glDetachShader
// glDrawBuffers
// glGetActiveAttrib
// glGetActiveUniform
// glGetAttachedShaders
// glGetAttribLocation
// glGetShaderSource
// glGetShaderiv                                             <--- more than one type?
// glGetProgramiv                                            <--- more than one type?
// glGetShaderInfoLog
// glGetProgramInfoLog
// glGetUniformLocation
// glGetUniformfv                                            <--- more than one type?
// glGetUniformiv                                            ...
// glIsProgram
// glIsShader
// glLinkProgram
// glShaderSource
// glStencilFuncSeparate
// glStencilOpSeparate
// glUniform1f                                               <--- more than one type?
// glUniform1fv                                              ...
// glUniform1i                                               ...
// glUniform1iv                                              ...
// glUniform2f                                               ...
// glUniform2fv                                              ...
// glUniform2i                                               ...
// glUniform2iv                                              ...
// glUniform3f                                               ...
// glUniform3fv                                              ...
// glUniform3i                                               ...
// glUniform3iv                                              ...
// glUniform4f                                               ...
// glUniform4fv                                              ...
// glUniform4i                                               ...
// glUniform4iv                                              ...
// glUniformMatrix2fv                                        ...
// glUniformMatrix3fv                                        ...
// glUniformMatrix4fv                                        ...
// glUseProgram
// glValidateProgram
// glVertexAttrib1d                                          <--- more than one type?
// glVertexAttrib1dv                                         ...
// glVertexAttrib1f                                          ...
// glVertexAttrib1fv                                         ...
// glVertexAttrib1s                                          ...
// glVertexAttrib1sv                                         ...
// glVertexAttrib2d                                          ...
// glVertexAttrib2dv                                         ...
// glVertexAttrib2f                                          ...
// glVertexAttrib2fv                                         ...
// glVertexAttrib2s                                          ...
// glVertexAttrib2sv                                         ...
// glVertexAttrib3f                                          ...
// glVertexAttrib3fv                                         ...
// glVertexAttrib3s                                          ...
// glVertexAttrib3sv                                         ...
// glVertexAttrib4Nbv                                        ...
// glVertexAttrib4Niv                                        ...
// glVertexAttrib4Nsv                                        ...
// glVertexAttrib4Nub                                        ...
// glVertexAttrib4Nubv                                       ...
// glVertexAttrib4Nuiv                                       ...
// glVertexAttrib4Nusv                                       ...
// glVertexAttrib4bv                                         ...
// glVertexAttrib4d                                          ...
// glVertexAttribdv                                          ...
// glVertexAttrib4f                                          ...
// glVertexAttrib4fv                                         ...
// glVertexAttrib4iv                                         ...
// glVertexAttrib4s                                          ...
// glVertexAttrib4sv                                         ...
// glVertexAttrib4ubv                                        ...
// glVertexAttrib4uiv                                        ...
// glVertexAttrib4usv                                        ...
// glVertexAttribPointer

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 2.1

// TODO

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 3.0

// GL_map_buffer_range

// GL_vertex_array_object

typedef void (__stdcall *PFN_glBindVertexArray)( uint_t _uArray );
extern PFN_glBindVertexArray glBindVertexArray;

typedef void (__stdcall *PFN_glDeleteVertexArrays)( 
	uint_t _uCount, uint_t const *_puArrays 
	);
extern PFN_glDeleteVertexArrays glDeleteVertexArrays;

typedef void (__stdcall *PFN_glGenVertexArrays)( 
	uint_t _uCount, uint_t *_puArrays 
	);
extern PFN_glGenVertexArrays glGenVertexArrays;

typedef bool_t (__stdcall *PFN_glIsVertexArray)( uint_t _uArray );
extern PFN_glIsVertexArray glIsVertexArray;

#define GL_VERTEX_ARRAY_BINDING                        0x85B5

// GL_color_buffer_float
// GL_depth_buffer_float
// GL_framebuffer_object
// GL_framebuffer_sRGB
// GL_half_float_pixel
// GL_texture_compression_rgtc
// GL_texture_float
// GL_texture_rg
// GL_draw_buffers2
// GL_framebuffers_blit
// GL_framebuffer_multisample
// GL_gpu_shader4
// GL_packed_depth_stencil
// GL_packed_float
// GL_texture_array
// GL_texture_integer
// GL_texture_shared_exponent
// GL_transform_feedback
// GL_conditional_render
// GL_half_float_vertex

// glBeginConditionalRender
// glBeginTransformFeedback
// glBindBufferBase
// glBindBufferRange
// glBindFragDataLocation
// glClampColor
// glClearBufferfi                                                <--- more than one?
// glClearBufferfv                                                ...
// glClearBufferiv                                                ...
// glClearBufferuiv                                               ...
// glColorMaski
// glDisablei                                                     <--- more than one?
// glEnablei                                                      <--- more than one?
// glEndConditionalRender
// glEndTransformFeedback
// glGetBooleani_v                                                <--- more than one?
// glGetFragDataLocation
// glGetIntegeri_v                                                <--- more than one?
// glGetStringi                                                   <--- more than one?
// glGetTexParameterIiv                                           <--- more than one?
// glGetTexParameterIuiv                                          ...
// glGetTransformFeedbackVarying
// glGetUniformuiv                                                <--- more than one?
// glGetVertexAttribIiv                                           <--- more than one?
// glGetVertexAttribIuiv                                          ...
// glIsEnabledi                                                   <--- more than one?
// glTexParameterIiv                                              <--- more than one?
// glTexParameterIuiv                                             ...
// glTransformFeedbackVaryings
// glUniform1ui                                                   <--- more than one?
// glUniform1uiv                                                  ...
// glUniform2ui                                                   ...
// glUniform2uiv                                                  ...
// glUniform3ui                                                   ...
// glUniform3uiv                                                  ...
// glUniform4ui                                                   ...
// glUniform4uiv                                                  ...
// glVertexAttribI1i                                              <--- more than one?
// glVertexAttribI1iv                                             ...
// glVertexAttribI1ui                                             ...
// glVertexAttribI1uiv                                            ...
// glVertexAttribI2i                                              ...
// glVertexAttribI2iv                                             ...
// glVertexAttribI2ui                                             ...
// glVertexAttribI2uiv                                            ...
// glVertexAttribI3i                                              ...
// glVertexAttribI3iv                                             ...
// glVertexAttribI3ui                                             ...
// glVertexAttribI3uiv                                            ...
// glVertexAttribI4bv                                             ...
// glVertexAttribI4i                                              ...
// glVertexAttribI4iv                                             ...
// glVertexAttribI4sv                                             ...
// glVertexAttribI4ubv                                            ...
// glVertexAttribI4ui                                             ...
// glVertexAttribI4uiv                                            ...
// glVertexAttribIusv                                             ...
// glVertexAttribIPointer                                         ...

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 3.1

// TODO

/////////////////////////////////////////////////////////////////////////////////////
// GL_VERSION 3.2

// TODO

/////////////////////////////////////////////////////////////////////////////////////
// WGL

// WGL_pixel_format

typedef bool_t (__stdcall *PFN_wglGetPixelFormatAttribiv)( 
	HDC _hDC, int_t _iPixelFormat, int_t _iLayerPlane, uint_t _uAttributeCount, 
	int_t const *_piAttributes, int_t *_piValues 
	);
extern PFN_wglGetPixelFormatAttribiv wglGetPixelFormatAttribiv;

typedef BOOL (__stdcall *PFN_wglGetPixelFormatAttribfv)( 
	HDC _hDC, int_t _iPixelFormat, int_t _iLayerPlane, uint_t _uAttributeCount, 
	int_t const *_piAttributes, float_t *_pfValues 
	);
extern PFN_wglGetPixelFormatAttribfv wglGetPixelFormatAttribfv;

typedef BOOL (__stdcall *PFN_wglChoosePixelFormat)( 
	HDC _hDC, int_t const *_piAttribIList, float_t const *_pfAttribFList, 
	uint_t _uMaxFormats, int_t *_piFormats, uint_t *_uNumFormats 
	);
extern PFN_wglChoosePixelFormat wglChoosePixelFormat;

#define WGL_NUMBER_PIXEL_FORMATS                       0x2000
#define WGL_DRAW_TO_WINDOW                             0x2001
#define WGL_DRAW_TO_BITMAP                             0x2002
#define WGL_ACCELERATION                               0x2003
#define WGL_NEED_PALETTE                               0x2004
#define WGL_NEED_SYSTEM_PALETTE                        0x2005
#define WGL_SWAP_LAYER_BUFFERS                         0x2006
#define WGL_SWAP_METHOD                                0x2007
#define WGL_NUMBER_OVERLAYS                            0x2008
#define WGL_NUMBER_UNDERLAYS                           0x2009
#define WGL_TRANSPARENT                                0x200A
#define WGL_TRANSPARENT_RED_VALUE                      0x2037
#define WGL_TRANSPARENT_GREEN_VALUE                    0x2038
#define WGL_TRANSPARENT_BLUE_VALUE                     0x2039
#define WGL_TRANSPARENT_ALPHA_VALUE                    0x203A
#define WGL_TRANSPARENT_INDEX_VALUE                    0x203B
#define WGL_SHARE_DEPTH                                0x200C
#define WGL_SHARE_STENCIL                              0x200D
#define WGL_SHARE_ACCUM                                0x200E
#define WGL_SUPPORT_GDI                                0x200F
#define WGL_SUPPORT_OPENGL                             0x2010
#define WGL_DOUBLE_BUFFER                              0x2011
#define WGL_STEREO                                     0x2012
#define WGL_PIXEL_TYPE                                 0x2013
#define WGL_COLOR_BITS                                 0x2014
#define WGL_RED_BITS                                   0x2015
#define WGL_RED_SHIFT                                  0x2016
#define WGL_GREEN_BITS                                 0x2017
#define WGL_GREEN_SHIFT                                0x2018
#define WGL_BLUE_BITS                                  0x2019
#define WGL_BLUE_SHIFT                                 0x201A
#define WGL_ALPHA_BITS                                 0x201B
#define WGL_ALPHA_SHIFT                                0x201C
#define WGL_ACCUM_BITS                                 0x201D
#define WGL_ACCUM_RED_BITS                             0x201E
#define WGL_ACCUM_GREEN_BITS                           0x201F
#define WGL_ACCUM_BLUE_BITS                            0x2020
#define WGL_ACCUM_ALPHA_BITS                           0x2021
#define WGL_DEPTH_BITS                                 0x2022
#define WGL_STENCIL_BITS                               0x2023
#define WGL_AUX_BUFFERS                                0x2024

#define WGL_NO_ACCELERATION                            0x2025
#define WGL_GENERIC_ACCELERATION                       0x2026
#define WGL_FULL_ACCELERATION                          0x2027

#define WGL_SWAP_EXCHANGE                              0x2028
#define WGL_SWAP_COPY                                  0x2029
#define WGL_SWAP_UNDEFINED                             0x202A

#define WGL_TYPE_RGBA                                  0x202B
#define WGL_TYPE_COLORINDEX                            0x202C

// WGL_create_context_profile

typedef HGLRC (__stdcall *PFN_wglCreateContextAttribs)( 
	HDC _hDC, HGLRC _hShareContext, int_t const *_pAttribs 
	);
extern PFN_wglCreateContextAttribs wglCreateContextAttribs;

#define WGL_CONTEXT_MAJOR_VERSION                      0x2091
#define WGL_CONTEXT_MINOR_VERSION                      0x2092
#define WGL_CONTEXT_LAYER_PLANE                        0x2093
#define WGL_CONTEXT_FLAGS                              0x2094
#define WGL_CONTEXT_PROFILE_MASK                       0x9126

#define WGL_CONTEXT_DEBUG_BIT                          0x0001
#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT             0x0002

#define WGL_CONTEXT_CORE_PROFILE_BIT                   0x00000001
#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT          0X00000002

#define WGL_ERROR_INVALID_VERSION                      0x2095
#define WGL_ERROR_INVALID_PROFILE                      0x2096

// TODO: not sure where these came from

typedef bool_t (__stdcall *PFN_glVertexAttribPointer)( 
	uint_t _uIndex, int_t _iSize, GLenum _eType, bool_t _bNormalized, 
	uint_t _uStride, void const * _pOffset
	);
extern PFN_glVertexAttribPointer glVertexAttribPointer;

typedef bool_t (__stdcall *PFN_glEnableVertexAttribArray)( uint_t _uIndex );
extern PFN_glEnableVertexAttribArray glEnableVertexAttribArray;

// Header Protection
#endif _GLEXT_H_
